This AppleScript will find a random paragraph on a random page of your wiki, and then
display it in a window. It also has some neat features built into it, such as:
- Open the quoted VoodooPad page
- Put the quote on your clipboard
- automatically find all URLs in a quote, and open
any or all of them in your default client.
- Set preferences while the script is running:
– the minimum paragraph word length to find
– the maximum number of times to try and find
a suitable paragraph on each random page.
– the maximum number of random pages to look
for a suitable paragraph in before giving up.
(might increase the wait time)
Note that preferences will only be saved between runs if you use the system-wide script
menu, save the script as an application, or use a script launcher that supports
persistent properties. As of version 2.1.1, VoodooPad's built-in script menu does not
support this. As a work-around, you can change the default values directly in the script.
property minWords : 10
property maxPageTries : 10
property maxDocTries : 10
(*
July 7, 2005
100% original code written by Michael Henley (mike.com@mac.com)
http://silvermeteors.com
-
This is Emailware, ergo, if you use this script regularly, or if you
use any part of it in your own scripts, you must send me a nice
email telling me how great I am. Thank you.
*)
set theCommand to "Try Again"
repeat while theCommand is "Try Again"
set randomResult to getRandomText()
set vpPage to (item 1 of randomResult)
set randomText to (item 2 of randomResult)
set randomMessage to "[" & vpPage & "]" & return & randomText
set theCommand to button returned of ¬
(display dialog randomMessage buttons {"Cancel", "Options", "Try Again"} default button 3)
repeat while theCommand is not "Try Again"
if theCommand is "Less Options" then
set theCommand to button returned of ¬
(display dialog randomMessage buttons {"Cancel", "Options", "Try Again"} default button 3)
else if theCommand is "Options" then
set theCommand to button returned of ¬
(display dialog randomMessage buttons {"More Options", "Copy Clip", "Open Page"} default button 3)
else if theCommand is "More Options" then
set theCommand to button returned of ¬
(display dialog randomMessage buttons {"Less Options", "Open URLs", "Configure"} default button 3)
else if theCommand is "Copy Clip" then
set the clipboard to vpPage & ": " & randomText
set theCommand to "Less Options"
else if theCommand is "Open Page" then
tell application "VoodooPad" to tell document 1 to open page with title vpPage
set theCommand to "Less Options"
else if theCommand is "Open URLs" then
try
set theURLs to getURLs(randomText) as list
if length of theURLs is 1 then
set theURL to theURLs as string
else
set theURL to choose from list theURLs
end if
open location theURL
tell me to activate
set theCommand to "Less Options"
on error
set URLerror to return & return & "Error! Couldn't find any URLs. Please select another option."
set theCommand to button returned of ¬
(display dialog randomMessage & URLerror buttons {"More Options", "Copy Clip", "Open Page"} default button 3)
end try
else if theCommand is "Configure" then
set minWords to text returned of ¬
(display dialog "Only find paragraphs longer than
this number of words:" default answer minWords)
set maxPageTries to text returned of ¬
(display dialog "Maximum attempts per page:" default answer maxPageTries)
set maxDocTries to text returned of ¬
(display dialog "Maximum attempts per document:" default answer maxDocTries)
set theCommand to "Less Options"
end if
end repeat
end repeat
on getRandomText()
(*
July 7, 2005
100% original code written by Michael Henley (mike.com@mac.com)
http://silvermeteors.com
-
This is Emailware, ergo, if you use this script regularly, or if you
use any part of it in your own scripts, you must send me a nice
email telling me how great I am. Thank you.
*)
tell application "VoodooPad"
set randomRange to the count of pages of document 1
repeat maxDocTries times
set randomPage to (random number randomRange)
set randomParaRange to count of paragraphs of (text of page randomPage of document 1)
set randomPage to name of page randomPage of document 1
repeat maxPageTries times
set randomPara to (random number randomParaRange)
set randomText to (paragraph randomPara of text of page randomPage of document 1) as text
if (count of words of randomText) is greater than or equal to minWords then
return {randomPage, randomText}
end if
end repeat
end repeat
return {randomPage, "Couldn't find a paragraph longer than " & minWords ¬
& " words after " & maxPageTries & " attempts on " & maxDocTries & " pages."}
end tell
end getRandomText
on getURLs(sourceText)
(*
July 7, 2005
100% original code written by Michael Henley (mike.com@mac.com)
http://silvermeteors.com
-
This is Emailware, ergo, if you use this script regularly, or if you
use any part of it in your own scripts, you must send me a nice
email telling me how great I am. Thank you.
*)
set endDelim to " " (* change this value if you're looking for
something other than a space at the end of your URLs *)
set URLList to {}
set oldDelims to AppleScript's text item delimiters
set AppleScript's text item delimiters to "
" -- strip carriage returns
set sourceText to text items of sourceText
set AppleScript's text item delimiters to endDelim
set sourceText to sourceText & endDelim as string
set URISchemes to {"http:", "https:", "file:", "ftp:", "mailto:", "aim:", "telnet:", "news:", "rtsp:", "afp:", "eppc:", "rss:"}
repeat with delim from 1 to length of URISchemes
set delim to item delim of URISchemes as string
set AppleScript's text item delimiters to delim
set trimText to {}
repeat with x from 2 to length of sourceText's text items
set trimText to trimText & (text item x of sourceText) as list
end repeat
set AppleScript's text item delimiters to endDelim
repeat with x from 1 to length of trimText
set URLList to URLList & (delim & text item 1 of item x of trimText) as list
end repeat
end repeat
set AppleScript's text item delimiters to oldDelims
return URLList
end getURLs
Script submitted by – mike [dot] com [at] mac [dot] com